package cn.starrysky108.simpleerp.core.util;

import java.lang.reflect.Field;

/**
 * @author Carl Lee
 * 反射调用工具
 */
public class ReflectUtil {
    /**
     * 设置对象的值
     *
     * @param obj   目标对象
     * @param filed 字段名称
     * @param value 值
     */
    public static void setFiled(Object obj, String filed, Object value) {
        try {
            Field field = obj.getClass().getDeclaredField(filed);
            field.setAccessible(true);
            field.set(obj, value);
        } catch (NoSuchFieldException | IllegalAccessException e) {
            //找不到该字段或没有访问权限则直接返回
        }
    }

    /**
     * 获取目标对象某字段的值
     *
     * @param obj   目标对象
     * @param filed 字段
     * @return 字段值
     */
    public static Object getFieldValue(Object obj, String filed) {
        try {
            Field field = obj.getClass().getDeclaredField(filed);
            field.setAccessible(true);
            return field.get(obj);
        } catch (Exception e) {
            //找不到该字段或没有访问权限则返回false
            return null;
        }
    }

    /**
     * 判断目标对象是否包含某字段
     *
     * @param obj   目标对象
     * @param filed 字段
     * @return Boolean
     */
    public static Boolean containsField(Object obj, String filed) {
        Field field;
        try {
            field = obj.getClass().getDeclaredField(filed);
        } catch (Exception e) {
            //找不到该字段或没有访问权限则返回false
            field = null;
        }
        return field != null;
    }
}
